package com.lcf.app.rabbitmq.provider.config;

import com.lcf.common.model.MqConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author ChenFei
 * @date 2021/12/2
 */
@Configuration
public class RabbitFanoutConfig {

    @Bean
    public Queue fanoutQueueOne() {
        return new Queue(MqConstant.FANOUT_QUEUE_ONE);
    }

    @Bean
    public Queue fanoutQueueTwo() {
        return new Queue(MqConstant.FANOUT_QUEUE_TWO);
    }

    // 准备一个交换机
    @Bean
    public FanoutExchange fanoutExchange() {
        /**
         * 构造一个新的Exchange，指定名称、持久性标志和自动删除标志。
         * 参数:
         * name—交换的名称。
         * durable——如果我们声明一个耐久交换(交换将在服务器重启后继续存在)，则为真。
         * autoDelete -当交换器不再使用时，服务器应该删除它
         */
        return new FanoutExchange(MqConstant.FANOUT_EXCHANGE);
    }

    // 将交换机和队列进行绑定
    @Bean
    public Binding bindingFanoutOne() {
        return BindingBuilder.bind(fanoutQueueOne()).to(fanoutExchange());
    }

    @Bean
    public Binding bindingFanoutTwo() {
        return BindingBuilder.bind(fanoutQueueTwo()).to(fanoutExchange());
    }

}
